package cn.lizemin.strategy.version1.entity;

/**
 * @author lzm
 * @version 1.0
 * @description: 这是原始的计算机，只能实现加法和减法操作
 * @date 2022/4/22 10:28
 */
public class Calculator {

    private ComputeStrategy computeStrategy;

    /**
     * 每次使用新的计算策略，都需要重新new出一个计算机对象，太浪费了，太重量级了
     * @param computeStrategy
     */
//    public Calculator(ComputeStrategy computeStrategy) {
//        this.computeStrategy = computeStrategy;
//    }

    /**
     * 使用set方法来替代前面的构造器，可以实现复用对象的目的
     * @param computeStrategy
     */
    public void setComputeStrategy(ComputeStrategy computeStrategy) {
        this.computeStrategy = computeStrategy;
    }

    /**
     * 得到不同计算方式计算出来的结果
     * @param num1
     * @param num2
     * @return
     */
    public int getResult(int num1,int num2) {
        return this.computeStrategy.calculate(num1, num2);
    }

    /**
     * 缺陷在于，如果我们想要升级计算机，使其不仅可以做加减法，还可以实现乘除法
     * 那我们就需要修改这个类
     * @param num1
     * @param num2
     * @return
     */

//    public int add(int num1, int num2) {
//        return num1 + num2;
//    }
//
//    public int subtract(int num1, int num2) {
//        return num1 - num2;
//    }

    /**
     * 直接修改类，违反了开闭原则，对修改关闭，对扩展开放的设计原则
     * 利用策略模式进行优化：就是将一个个方法放到一个个类中
     */
//    public int multiply(int num1, int num2) {
//        return num1 * num2;
//    }


}
